Refactor: eliminate quaternion derivative code duplication in u_dot_generalized_3dof#903
Conversation
…eneralized_3dof Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>
Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## enh/3-dof-lateral-motion-improvement #903 +/- ##
========================================================================
- Coverage 80.91% 80.39% -0.52%
========================================================================
Files 107 106 -1
Lines 13486 13043 -443
========================================================================
- Hits 10912 10486 -426
+ Misses 2574 2557 -17 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Gui-FernandesBR
left a comment
There was a problem hiding this comment.
Could separate the whole function into smaller methods... It makes code more readable and prevents refactors like this.
70c6b5f
into
enh/3-dof-lateral-motion-improvement
@Gui-FernandesBR separating the whole u_generalized_3dof function ? maybe yes that can be done like can create a separate helper function which does the whole wc thing. I saw your comment after merging. Will add a TODO for it, can take this up later. But will keep the advice in mind. |
* ENH: addition of bella lui based 3 dof and 6 dof comparison notebook - ENH: a new notebook bella_lui_3dof_vs_6dof.ipynb which uses new implementations of weathercocking model on 3dof * ENH: addition of weathercocking model to flight.py - ENH: introduced new weathercock_coeff parameter in Flight.init (default: 1.0) - ENH: updated u_dot_generalized_3dof to compute quaternion derivatives proportional to misalignment with relative wind - ENH: angular velocity = weathercock_coeff * sin(misalignment_angle) * ENH: added tests for weathercocking to test_flight_3dof.py - ENH: unit tests added for weathercocking to check whether weathercock_coeff=0 results in fixed attitude (no quaternion change). - MNT: format and lint updates for new additions * DOC: updating 3 dof documentation and corresponding index.rst - DOC: added 3 dof and 6 dof comparison analysis to three_dof_simulation.rst - DOC: updated iusers/index.rst to build three_dof_simulation.rst - MNT: deleted the bella_lui_3dof_vs_6dof_comparison.ipynb as the doc now covers this section * MNT: corrections to test_flight_3dof.py - MNT: corrected doc string to represent correct orientation - MNT: improved tolerance of check on quaternion derivative which should be ideally very small when axes are aligned * MNT: docstring corrections to flight.py around new weathercocking implementation * BUG: correction of singularity bug during align on vectors in weathercocking - BUG: implemented a dot product check to ensure that singularity bug is avoided when rocket body and wind velocity are anti aligned to make rocket statically stable (in u_dot_generalized_3dof) - MNT: removed redundant double assignment of e0 and w0 vectors within u_dot_generalized_3dof - MNT: format correction to test_flight_3dof.py * MNT: updating location of 3 dof doc in users index.rst - MNT: 3 dof documentation only referred in users section/getting started - MNT: correction of docstring in flight.py - MNT: corrected unit_vector call when defining rotation axis in u_dot_generalized_3dof - MNT: docstring correction in test_flight_3dof.py - ENH: test coverage added for anti alignment case in weathercock model to test_flight_3dof.py * DOC: three_dof_simulation.rst update to add explanation of weather cocking coeff usage and value. * MNT: changed default value of weather_coeff in flight.py and added fixtures to test_flight_3dof.py * MNT: shifting test_flight_dof.py to integration tests. - MNT: fixed default weathercock_coeff value in flight.py to match 3 dof behaviour by default - MNT: corrected fixtures and docstrings in test_flight_3dof.py * MNT: docsrting update in test_flight_3dof.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * MNT: Update of docstring in test_flight_3dof.py - MNT: correction of docstring now that fixtures are used. Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * DOC: Update of three_dof_simulation.rst Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update tests/integration/simulation/test_flight_3dof.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Docstring Update tests/integration/simulation/test_flight_3dof.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * docstring Update tests/integration/simulation/test_flight_3dof.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * docstring Update docs/user/three_dof_simulation.rst Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Docstring Update rocketpy/simulation/flight.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * MNT: Docstring updates to various files related to 3 dof * MNT: unit vector edge case check in flight.py - MNT: perp_axis singularity value error implemented to handle edge case for perp_axis being parallel to body axis in weathercocking model of 3 dof. * DOC: Add note about motor file paths in 3-DOF comparison section (#902) * Initial plan * DOC: Add note about motor file paths in 3-DOF comparison section Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com> * MNT: eliminate quaternion derivative code duplication in u_dot_generalized_3dof (#903) * Initial plan * Refactor: eliminate quaternion derivative code duplication in u_dot_generalized_3dof Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com> * Improve comment clarity in weathercocking aligned case Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com> * DOC: CHANGELOG.md update to reflect implementation of 3 dof lateral motion improvement --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Pull request type
Checklist
pytest tests -m slow --runslow) have passed locallyCurrent behavior
The quaternion derivative calculation in
u_dot_generalized_3dofhad identical code blocks duplicated in two places (lines 1958-1962 and 1989-1993):New behavior
Refactored to compute
omega_bodyfirst in all branches, then calculate quaternion derivatives once:omega_bodybased on alignment state (normal, anti-aligned, or aligned/None)omega_body is not NoneThis reduces maintenance burden—formula updates only need to happen in one place.
Breaking change
Additional information
Addresses code review feedback on PR #883.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.